﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class OrganizacaoFilial
    {
        #region Variaveis Membro
        private int _idOrganizacaoMatrizFilial;
        private Organizacao _organizacaoMatriz;
        private Organizacao _organizacaoFilial;
        private Status _status;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdOrganizacaoMatrizFilial
        {
            get { return _idOrganizacaoMatrizFilial; }
            set { _idOrganizacaoMatrizFilial = value; }
        }
        public Organizacao OrganMatriz
        {
            get { return _organizacaoMatriz; }
            set { _organizacaoMatriz = value; }
        }
        public Organizacao OrganFilial
        {
            get { return _organizacaoFilial; }
            set { _organizacaoFilial = value; }
        }
        public Status Status
        {
            get { return _status; }
            set { _status = value; }
        }
        #endregion

        #region Construtores
        public OrganizacaoFilial()
        {
            try
            {
                _context = new GENTEEntities();
            }
            catch (Exception ex)
            {
                
                throw;
            }
        }
        public OrganizacaoFilial(int idOrganizacaoMatrizFilial)
        {
            try
            {
                _context = new GENTEEntities();
                Carregar(idOrganizacaoMatrizFilial);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        private void Carregar(int idOrganizacaoMatrizFilial)
        {
            try
            {
                var consulta = from om in _context.tab_organizacao_relacao_matriz
                               where om.id_organ_matriz_filial == idOrganizacaoMatrizFilial
                               select new
                               {
                                   om.id_organ_matriz_filial,
                                   id_organizacao_matriz = om.tab_organizacao.Id_organizacao,
                                   id_organizacao_filial = om.tab_organizacao1.Id_organizacao,
                                   om.tab_status.id_status
                               };
                
                var listTipoServico = consulta.ToList();

                foreach (var list in listTipoServico)
                {
                    this._idOrganizacaoMatrizFilial = list.id_organ_matriz_filial;
                    this._organizacaoMatriz = new Organizacao(list.id_organizacao_matriz);
                    this._organizacaoFilial = new Organizacao(list.id_organizacao_filial);
                    this._status = new Status(list.id_status);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private bool ExisteCadastro()
        {
            try
            {
                bool existe = false;

                var consulta = from om in _context.tab_organizacao_relacao_matriz
                               where om.tab_organizacao.Id_organizacao == _organizacaoMatriz.IdOrganizacao
                               && om.tab_organizacao1.Id_organizacao == _organizacaoFilial.IdOrganizacao
                               select om;

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    existe = true;
                }

                return existe;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos

        #region Metodos Selecao
        public List<OrganizacaoFilial> SelectAll()
        {
            try
            {
                List<OrganizacaoFilial> listOrganizacaoFilial = new List<OrganizacaoFilial>();

                var consulta = from om in _context.tab_organizacao_relacao_matriz
                               select new
                               {
                                   om.id_organ_matriz_filial,
                                   id_organizacao_matriz = om.tab_organizacao.Id_organizacao,
                                   id_organizacao_filial = om.tab_organizacao1.Id_organizacao,
                                   om.tab_status.id_status
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    OrganizacaoFilial organizacaoFilial = new OrganizacaoFilial();
                    organizacaoFilial.IdOrganizacaoMatrizFilial = list.id_organ_matriz_filial;
                    organizacaoFilial.OrganMatriz = new Organizacao(list.id_organizacao_matriz);
                    organizacaoFilial.OrganFilial = new Organizacao(list.id_organizacao_filial);
                    organizacaoFilial.Status = new Status(list.id_status);

                    listOrganizacaoFilial.Add(organizacaoFilial);
                }

                return listOrganizacaoFilial;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos de Persitencia
        public void Salvar()
        {
            try
            {
                if (!ExisteCadastro())
                {
                    tab_organizacao_relacao_matriz tabFilial = new tab_organizacao_relacao_matriz();
                    tabFilial.tab_organizacaoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_organizacao", "id_organizacao_matriz", _organizacaoMatriz.IdOrganizacao);
                    tabFilial.tab_organizacao1Reference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_organizacao1", "id_organizacao_filial", _organizacaoFilial.IdOrganizacao);
                    tabFilial.tab_statusReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_status", "id_status_matriz", _status.IdStatus);

                    _context.AddTotab_organizacao_relacao_matriz(tabFilial);
                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #endregion
    }
}
